package chapter2

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

/**
 * Created with IntelliJ IDEA.
 * User: 令狐飞侠
 * Date: 2021-12-3
 * Description: gorm的简单使用
 */

var db *gorm.DB

type User struct {
	Id           int64  `gorm:"primary_key"`
	UserName     string `gorm:"column:user_name"`
	UserPassword string `gorm:"column:user_password"`
	RoleId       int8   `gorm:"column:role_id"`
	UserPhone    string `gorm:"column:user_phone"`
	RegTime      string `gorm:"column:reg_time"`
	RoleStatus   int8   `gorm:"column:user_status"`
}

//通过给struct实体类定义TableName，返回绑定表名
func (u User) TableName() string {
	//绑定MYSQL表名为user
	return "tb_user"
}

//连接数据库
func ConnectDb() {
	//配置MySQL连接参数
	username := "root"         //账号
	password := "123456" //密码
	host := "127.0.0.1" //数据库地址，可以是Ip或者域名
	port := 3306        //数据库端口
	dbname := "db_test" //数据库名
	//连接MYSQL
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, dbname)

	var err error
	db, err = gorm.Open("mysql", dsn)

	if err != nil {
		panic("数据库连接失败，error:" + err.Error())
	} else {
		fmt.Println("数据库连接成功:")
	}
}

//关闭数据库
func CloseDb() {
	fmt.Println("关闭数据库:")
	db.Close()
}

//查询用户
func SelectUser() {
	fmt.Println("---------查询user begin---------")
	var users []User
	db.Find(&users)
	for _, user := range users {
		fmt.Println("用户:")
		fmt.Println("名称:", user.UserName)
		fmt.Println("手机号:", user.UserPhone)
		fmt.Println("注册时间:", user.RegTime)
	}
	fmt.Println("---------查询user end---------")
}

//根据名称查询用户
func SelectUserByUserName(name string) {
	fmt.Println("---------查询user begin---------")
	var user User
	result := db.Where("user_name=?", name).First(&user)
	if result.Error != nil {
		fmt.Println("查询失败。")
	} else {
		fmt.Println("名称:", user.UserName)
		fmt.Println("手机号:", user.UserPhone)
		fmt.Println("注册时间:", user.RegTime)
	}
	fmt.Println("---------查询user end---------")
}

//插入一条用户数据数据
func InsertUser() {
	fmt.Println("---------插入user begin---------")
	insertUser := User{
		Id:           1,
		UserName:     "令狐冲",
		UserPassword: "123456",
		UserPhone:    "666",
		RoleId:       1,
		RegTime:      "2021-12-3 00:00:00",
		RoleStatus:   1,
	}
	if err := db.Create(insertUser).Error; err != nil {
		fmt.Println("新增用户失败，err:", err)
	} else {
		fmt.Println("新增用户成功！")
	}
	fmt.Println("---------插入user end---------")
}

//修改用户
func UpdateUser(id int64,  phone string) {
	fmt.Println("---------更新user begin---------")
	var user User
	if err:=db.Model(&user).Where("id=?", id).Update("user_phone", phone ).Error ; err!=nil{
		fmt.Println("修改用户信息失败，err:", err)
	}else{
		fmt.Println("修改用户信息成功！")
	}

	fmt.Println("---------更新user end---------")
}

//删除用户
func DeleteUser(id int64) {
	fmt.Println("---------删除user begin---------")
	delUser := &User{
		Id: id,
	}
	if err := db.Delete(delUser).Error; err != nil {
		fmt.Println("删除用户失败，err:", err)
	} else {
		fmt.Println("删除用户成功！")
	}
	fmt.Println("---------删除user end---------")
}
